<?php

class DateHelper
{
    /**
     * 获取当前日期和时间
     * @param string $format 默认格式为 'Y-m-d H:i:s'
     * @return string
     */
    public static function now($format = 'Y-m-d H:i:s')
    {
        return date($format);
    }

    /**
     * 将日期字符串转换为指定格式
     * @param string $dateStr 日期字符串
     * @param string $format 转换后的格式，默认 'Y-m-d H:i:s'
     * @return string
     */
    public static function format($dateStr, $format = 'Y-m-d H:i:s')
    {
        $timestamp = strtotime($dateStr);
        if ($timestamp === false) {
            throw new Exception("无效的日期字符串：$dateStr");
        }
        return date($format, $timestamp);
    }

    /**
     * 获取两个日期之间的时间差
     * @param string $startDate 开始日期
     * @param string $endDate 结束日期
     * @return array 返回差值数组 ['years', 'months', 'days', 'hours', 'minutes', 'seconds']
     */
    public static function diff($startDate, $endDate)
    {
        $start = new DateTime($startDate);
        $end = new DateTime($endDate);
        $interval = $start->diff($end);

        return [
            'years' => $interval->y,
            'months' => $interval->m,
            'days' => $interval->d,
            'hours' => $interval->h,
            'minutes' => $interval->i,
            'seconds' => $interval->s,
        ];
    }

    /**
     * 获取指定日期的时间戳
     * @param string $date 日期字符串
     * @return int
     */
    public static function toTimestamp($date)
    {
        $timestamp = strtotime($date);
        if ($timestamp === false) {
            throw new Exception("无效的日期字符串：$date");
        }
        return $timestamp;
    }

    /**
     * 根据时间戳获取格式化日期
     * @param int $timestamp 时间戳
     * @param string $format 日期格式，默认 'Y-m-d H:i:s'
     * @return string
     */
    public static function fromTimestamp($timestamp, $format = 'Y-m-d H:i:s')
    {
        return date($format, $timestamp);
    }

    /**
     * 添加时间到指定日期
     * @param string $date 日期字符串
     * @param string $interval 时间间隔，例如 '+1 day', '+2 hours'
     * @param string $format 返回的日期格式，默认 'Y-m-d H:i:s'
     * @return string
     */
    public static function addTime($date, $interval, $format = 'Y-m-d H:i:s')
    {
        $timestamp = strtotime($interval, strtotime($date));
        if ($timestamp === false) {
            throw new Exception("无法解析时间间隔：$interval");
        }
        return date($format, $timestamp);
    }

    /**
     * 检查日期字符串是否为有效日期
     * @param string $date 日期字符串
     * @param string $format 日期格式，默认 'Y-m-d'
     * @return bool
     */
    public static function isValidDate($date, $format = 'Y-m-d')
    {
        $d = DateTime::createFromFormat($format, $date);
        return $d && $d->format($format) === $date;
    }
    /**
     * php日期两个时间相减，精确到多少分钟
     * @param string $startTime 开始日期
     * @param string $endTime 接收时期 日期格式，默认 'Y-m-d H:i:s'
     * @return bool
     */


    public static function getDiffInMinutes($startTime, $endTime)
    {
        // 创建 DateTime 对象
        $start = new DateTime($startTime);
        $end = new DateTime($endTime);

        // 计算时间差
        $interval = $start->diff($end);

        // 转换为分钟
        $totalMinutes = ($interval->days * 24 * 60) + // 天数转换为分钟
                        ($interval->h * 60) +         // 小时转换为分钟
                        $interval->i;                // 分钟

        return $totalMinutes;
    }

}

/*// php日期两个时间相减，精确到多少分钟
$start = '2024-12-29 08:00:00';
$end = '2024-12-29 10:30:00';

echo "时间差为：" .DateHelper::getDiffInMinutes($start, $end) . " 分钟";

// 获取当前时间
echo DateHelper::now();

// 日期格式化
echo DateHelper::format('2024-12-29', 'd/m/Y');

// 时间差计算
print_r(DateHelper::diff('2024-01-01', '2024-12-31'));

// 转换为时间戳
echo DateHelper::toTimestamp('2024-12-29 10:00:00');

// 从时间戳获取日期
echo DateHelper::fromTimestamp(1709100000);

// 添加时间
echo DateHelper::addTime('2024-12-29 10:00:00', '+3 days');

// 验证日期格式
var_dump(DateHelper::isValidDate('2024-12-29'));*/

